# -*- coding: utf-8 -*-

import datetime,urllib,logging, cgi, os
from xml.dom import minidom

from google.appengine.api import urlfetch
from google.appengine.ext import webapp

import s

class call(webapp.RequestHandler):
  def post(self):
	"""Hordissime, confirmation d'identitée
	
	Cette page sert de proxy à DGM, pour confirmer l'identité d'un joueur.
	Le module appelant fournis un ticket et la clé joueur. La messagerie récupère avec
	cette clé l'uid et le pseudo du joueur, sans possibilité d'alteration coté client.
	Puis la page envoie ces données directement à hordissimes, sans les stockées. 
	La messagerie n'enregistre ou n'altère aucune donnée lors de la transaction.

	"""
	key = self.request.get('key')
	tok = self.request.get('ticket')
	url = 'http://hordissime.appspot.com/register'

	try:
		sock = urllib.urlopen("http://hordes.fr/xml/ghost?k=%s;sk=%s"%(key,s.key))
		ame = minidom.parse(sock)
		sock.close()
	except DownloadError:
		logging.error('Download error for ticket %s and key %s'%(tok,key))
		self.response.out.write('ko')
		return

	try: ame
	except NameError:
		logging.error('error while parsing for ticket %s and key %s'%(tok,key))
		self.response.out.write('ko')
		return
	# get uid & pseudo
	citizen = ame.getElementsByTagName('citizen')
	post_field = {
		'pseudo' : citizen[0].attributes['name'].value,
		'uid' : citizen[0].attributes['id'].value,
		'ticket': tok,
		'sign': s.hordissime,
	}
	post_data = urllib.urlencode(post_field)
	result = urlfetch.fetch(url = url,
							payload = post_data,
							method = urlfetch.POST,
							headers={'Content-Type': 'application/x-www-form-urlencoded'})
	if result.status_code == 200:
		self.response.out.write('ok')
	else:
		logging.error('error while sending data for ticket %s and key %s'%(tok,key))
		self.response.out.write('ko')
